/**
 * 
 */
package  server.persistencia;

import server.dominio.Centro;
import server.dominio.Medico;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashSet;
import server.dominio.Horario;
import server.dominio.Usuario;

 



/**
 * @author tpaxle
 *
 */
public class DAOMedicoMySQL extends DAOMedico {
	private Agente Broker;
	private Connection Con;
	
	public DAOMedicoMySQL() throws SQLException{
		Broker= Agente.getAgente();
		Con= Broker.getConnection();
	}
	
	/* (non-Javadoc)
	 * @see persistencia.DAOMedico#delete(java.lang.Object)
	 */
	@Override
	public int delete(Object medico)throws SQLException{
		PreparedStatement stmt;
		int result= 0;

		stmt = Con.prepareStatement("DELETE FROM Medico WHERE idMedico_pk= ?");
                stmt.setInt(1, ((Medico)medico).getIdMedicoPk());
		result= stmt.executeUpdate();

		return result;
	}

	
	
	/* (non-Javadoc)
	 * @see persistencia.DAOMedico#find(java.lang.String)
	 */
	@Override
	public Object find(String condicion)throws SQLException {
		Medico medico= null;
		Statement stmt;	

		DAOCentroMySQL daoC= new DAOCentroMySQL();
                DAOUsuarioMySQL daoU= new DAOUsuarioMySQL();

		stmt = Con.createStatement();
		ResultSet res  = stmt.executeQuery(condicion);
		
		if(res.next()){
                        Usuario usuario= (Usuario) daoU.find("SELECT * FROM USUARIO where idUsuario_pk= "+ res.getInt("idUsuario_fk"));
                        if(usuario!= null){
				 Centro centro = (Centro)daoC.find("SELECT * FROM CENTRO WHERE idCentro_pk= "+res.getInt("idCentro_fk"));
                                 if(centro!= null){
                                     medico= new Medico(centro, usuario, res.getInt("idTipo_medico"));
                                     medico.setIdMedicoPk(res.getInt("idMedico_pk"));
                                 }

                        }

			 
                }

                daoC.cerrarDAO();
                daoU.cerrarDAO();
                return medico;
         } 





	/* (non-Javadoc)
	 * @see persistencia.DAOMedico#insert(java.lang.Object)
	 */
	@Override
	public int insert(Object obj) throws SQLException{
		//Insercion tanto de Persona como de Medico
		Medico aux= (Medico)obj;
		int resul=0;
	
		
		PreparedStatement stmt = Con.prepareStatement("INSERT INTO Medico(idCentro_fk, idTipo_medico, idUsuario_fk) VALUES (?,?,(SELECT idUsuario_pk FROM USUARIO WHERE Nif= '"+aux.getUsuario().getNif()+ "'))");
		stmt.setInt(1, aux.getCentro().getIdCentroPk());
		stmt.setInt(2, aux.getIdTipoMedico());

		resul= stmt.executeUpdate();
		
                stmt.close();
	  		
		return resul;

	}

	/* (non-Javadoc)
	 * @see persistencia.DAOMedico#select(java.lang.String)
	 */



        @Override
	public ArrayList<Object> select(String condicion) throws SQLException{
		/* String condicion: Debe ser una subconsulta que incluya los datos de Medico y Persona*/
		ArrayList<Object> medicos = new ArrayList<Object>();
		Statement stmt;
		DAOCentroMySQL daoC= new DAOCentroMySQL();
                DAOUsuarioMySQL daoU= new DAOUsuarioMySQL();
	
		stmt = Con.createStatement();
		ResultSet res  = stmt.executeQuery(condicion);
		 while(res.next()) {
                     Usuario usuario= (Usuario) daoU.find("SELECT * FROM Usuario WHERE idUsuario_pk= "+res.getInt("idUsuario_fk"));
                     Centro centro= (Centro) daoC.find("SELECT * FROM Centro WHERE idCentro_pk= "+ res.getInt("idCentro_fk"));
                     Medico medico= new Medico(centro, usuario, res.getInt("idTipo_medico"));
                     medico.setIdMedicoPk(res.getInt("idMedico_pk"));

                     medicos.add(medico);
                 }
		 res.close(); 
		 stmt.close();
		 daoC.cerrarDAO();
	        daoU.cerrarDAO();
		return medicos;
	}

	/* (non-Javadoc)
	 * @see persistencia.DAOMedico#update(java.lang.String)
	 */
	@Override
	public int update(Object obj) throws SQLException{
		Medico aux= (Medico)obj;
		int resul=0;

		
	//	Persona p= new Persona(aux.getIdPersona(),aux.getNif(),aux.getNombre(), aux.getApellidos(), aux.getDomicilio(), aux.getTeleFijo(), aux.getTeleMovil(), aux.getEmail(), aux.getFecha_nacimiento());

		//dao.update(p);

                PreparedStatement stmt = Con.prepareStatement("UPDATE Medico SET idCentro_fk= ?, idTipo_medico= ? WHERE idMedico_pk= (SELECT idUsuario_pk FROM Usuario WHERE Nif= '"+aux.getUsuario().getNif()+"')");
                stmt.setInt(1, aux.getCentro().getIdCentroPk());
		stmt.setInt(2, aux.getIdTipoMedico());
                
		resul= stmt.executeUpdate();

		stmt.close();
                return resul;
	}
	
	public void cerrarDAO() throws SQLException{
		Con.close();
	}


}
